/**
  * Author: Mei
  * Date: 2020-12-13 15:11
  * Description: 算法
  * 通用算法的参数 一般有三种
  * 迭代器参数
  * 辅助参数 就是一些值
  * 谓词参数
  *
  *
  */
#include "../../head.h"

using namespace std;

int main() {
    sort(); //排序
    stable_sort(); //与sort类似，不过保留相等元素之间的顺序
    find_first_of(); //在第一段区域查找与第二段区域中任意相匹配的数据元素 返回第一个匹配的迭代器
    swap_ranges(); //将两个区域中数据进行对应交换

    //查找和搜寻
    adjacent_find(); //在指定元素范围内，查找一对符合条件的相邻元素 比如11和11相等
    binary_search(); //二分查找
    count(); //对标识范围内查找输入值相等的元素数目
    count_if();
    equal_range(); //类似equal 返回一对iterator 第一个表lower_bound, 第二个upper_bound
    find();
    find_end(); //查找最后一次出现的位置
    find_first_of(); //查找任意一个元素的第一次出现
    find_if();
    search(); //查找子序列第一次出现的位置并返回迭代器
    search_n(); //在指定范围内查找val出现n次的子序列

    equal(); //判断两个操作数据序列是否相等 返回true
    mismatch(); //也是用于两个序列的比较 返回第一个不相等的pair

    //变异算法
    //是一组在完成功能需要修改容器数据元素的模板函数
    copy();
    copy_backward(); //以相反顺序复制序列
    iter_swap(); //交换两个元素的值
    remove(); //移除指定返回内所有等于指定值的元素(不是删除)
    remove_copy(); //将所有不匹配元素复制到一个定制容器
    remove_if();
    replace(); //替换
    replace_if();
    replace_copy();
    swap(); //交换存储在两个对象中的值
    swap_ranges();
    unique(); //清楚序列中重复元素，和remove类似，它也不能真正删除元素，
    unique_copy();

    //生成和填充算法
    fill(); //将输入值赋给标志元素内的所有元素
    fill_n(); //将输入值赋给first到first+n范围内的所有元素
    generate(); //连续调用输入的函数来填充指定的范围
    generate_n(); //与generate()类似，填充从指定iterator开始的n个元素
    transform(); //将输入的操作作用于指定范围内的每个元素，并产生一个新的序列

    //排序算法
    merge(); //合并两个序列并生成一个新的序列，并对新的序列排序
    inplace_merge(); //合并同一个容器中的两个分段有序序列并排序  也叫归并排序算法

    partial_sort(); //对序列做部分排序
    partition(); //对指定范围内元素重新排序，把符合谓词的元素排在前面
    stable_partition(); //与partition()类似，不过不保证容器中的相对顺序
    nth_element();

    random_shuffle(); //对指定范围内的元素随机调整次序
    reverse();
    rotate();  //将指定范围内元素移到容器末尾

    //堆算法
    make_heap(); ///把指定范围内的元素生成一个堆，
    pop_heap(); //
    push_heap();
    sort_heap();

    //算术算法和关系算法
    accumulate(); //累加
    partial_sum();

    equal();
    includes();
    max();
    max_element();
    min();
    min_element();
    mismatch(); //找出一个不匹配的位置，返回一对iterator

    return 0;
}